{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "30da5c38-0b19-4444-b071-41ccead83c9a",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_ollama import OllamaEmbeddings\n",
    "\n",
    "model = \"deepseek-r1:32b\"\n",
    "embeddings = OllamaEmbeddings(model=model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c5baf48f-9787-4b5c-a8ad-1dc18b88518d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_core.documents import Document\n",
    "from langchain_postgres import PGVector\n",
    "from langchain_postgres.vectorstores import PGVector\n",
    "\n",
    "# See docker command above to launch a postgres instance with pgvector enabled.\n",
    "connection = \"postgresql+psycopg://langchain:qwer1234@localhost:5432/langchain\"  # Uses psycopg3!\n",
    "collection_name = \"my_docs\"\n",
    "\n",
    "vector_store = PGVector(\n",
    "    embeddings=embeddings,\n",
    "    collection_name=collection_name,\n",
    "    connection=connection,\n",
    "    use_jsonb=True,\n",
    ")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "76543786-f3a4-4986-a678-6e91ab79ed14",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['5d777600-000e-4d9d-be0b-79fa88e231da',\n",
       " 'c98b3805-fd93-4b43-b8f1-88ba114b3d5a',\n",
       " 'b0c94caf-52d2-434b-83c8-e2e8525e0169',\n",
       " '9dba0018-598e-49c1-a3f5-361c9d759fce',\n",
       " '3ed73402-b752-47c7-af64-75d8ede74373',\n",
       " '58b9be2b-fcbb-4406-ba4b-6c9bfe044120',\n",
       " 'bd55bf7b-4f44-4ffb-bc82-be564363b705',\n",
       " '1c26ee54-51a4-44ee-998d-8d5eeb55406b',\n",
       " 'b88135b8-6e92-4625-be68-275385054441',\n",
       " 'c9c0906e-796e-4370-bbb0-2ca1e8282ff9',\n",
       " 'ab13d7fb-3784-47e7-8942-f2b9a12caa95',\n",
       " '93205341-78c1-4c51-b569-16588f04ea4d',\n",
       " '554db925-26be-45a9-901e-b86a3406f226',\n",
       " '44cb4632-6bd2-4adb-8221-6fe416c3a1bd',\n",
       " '0e55ebff-f170-40bf-8f33-e3f10c50f87a',\n",
       " 'c6172ca1-5fd1-4ef7-8153-570895355673',\n",
       " '66135c70-4472-44d3-8833-78352b3b7dac',\n",
       " 'a86b5bb9-8bdb-47dd-8d25-86728c69953d',\n",
       " '0ab01a66-3cc2-49b4-b689-d38682c4c843',\n",
       " 'c54ac1e8-b4f3-48d0-9d2e-8f3ff3e755c3',\n",
       " 'b949259c-b17f-4053-b604-41c08c3a404e',\n",
       " 'f6aee41e-6378-489d-ad0b-12f2df566c71',\n",
       " 'cadb83ba-0308-4628-a85c-2247cd854be9']"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from langchain.document_loaders import PDFPlumberLoader\n",
    "from langchain_text_splitters import CharacterTextSplitter\n",
    "from langchain_community.document_loaders import PyPDFLoader\n",
    "\n",
    "#file_path = '/home/geobeans/Documents/pdf/信息地理学_信息革命重塑地理学_李新.pdf'\n",
    "file_path = '/home/geobeans/Documents/pdf/基于大模型的具身智能任务规.pdf'\n",
    "\n",
    "loader = PDFPlumberLoader(file_path)\n",
    "documents = loader.load_and_split()\n",
    "\n",
    "#embeddings = OllamaEmbeddings(model=model)\n",
    "\n",
    "#vector_store.add_documents(docs, ids=[doc.metadata[\"id\"] for doc in docs])\n",
    "vector_store.add_documents(documents)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "3e62e2fe-d235-41a7-a65d-ee4bbcf40136",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain.llms import Ollama\n",
    "from langchain.chains import RetrievalQA\n",
    "\n",
    "llm = Ollama(model=model)\n",
    "qa_chain = RetrievalQA.from_chain_type(llm, retriever=vector_store.as_retriever())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "a3e17066-8796-4d80-a2e4-3b9e9303730f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<think>\n",
      "嗯，用户的问题是“信息地理学的来源有哪些”。首先，我需要明确什么是信息地理学。可能它结合了信息科学和地理学的知识。那它的来源是什么呢？应该是从这些学科中发展而来的。\n",
      "\n",
      "我记得地理学有空间分析、地图制图等方法，这些都是基础。然后计算机科学带来了数据处理技术，比如数据库管理和GIS（地理信息系统）。信息科学则涉及到如何组织和管理大量信息，这对信息地理学很重要。\n",
      "\n",
      "还有网络技术和遥感技术，这些现代科技的发展肯定也推动了信息地理学的进步。可能用户想知道这个学科的背景和发展动力，所以需要把这些来源都列出来，并简单解释每个来源的作用。\n",
      "\n",
      "另外，可能还要提到一些关键人物或历史事件，但用户的问题主要问的是来源，而不是具体的历史发展。因此，我应该重点放在各学科如何共同促成了信息地理学的发展上。\n",
      "\n",
      "最后，要总结一下这些来源如何融合在一起，形成一个新兴的跨学科领域。这可能包括理论、方法和技术层面的整合。\n",
      "</think>\n",
      "\n",
      "信息地理学（Geoinformatics）是一门结合了地理学、计算机科学和信息科学的交叉学科，其主要目的是研究与地理空间相关的数据采集、处理、存储、分析、管理和应用的技术与方法。以下是一些主要的信息地理学的来源和相关领域：\n",
      "\n",
      "1. **地理学**  \n",
      "   作为信息地理学的基础学科之一，地理学提供了对空间分布、空间关系和地理现象的理解。地理学的研究方法（如地图制图、空间分析）为信息地理学奠定了理论基础。\n",
      "\n",
      "2. **计算机科学**  \n",
      "   计算机科学为信息地理学提供了数据处理、存储和分析的技术支持。例如，数据库管理、算法设计、编程语言等都对信息地理学的发展起到了关键作用。\n",
      "\n",
      "3. **信息科学**  \n",
      "   信息科学研究信息的获取、处理、传输和应用，这与信息地理学密切相关。信息科学的方法和技术（如数据挖掘、知识表示）为地理信息的管理和分析提供了理论支持。\n",
      "\n",
      "4. **测绘科学**  \n",
      "   测绘科学涉及地理空间数据的采集和处理技术，如卫星定位、遥感技术和地理信息系统（GIS）。这些技术是信息地理学的重要组成部分。\n",
      "\n",
      "5. **网络技术**  \n",
      "   随着互联网和物联网的发展，地理信息可以通过网络进行实时传输和共享。网络技术为信息地理学提供了新的研究方向，例如基于位置的服务（LBS）和空间数据的在线分析。\n",
      "\n",
      "6. **遥感技术**  \n",
      "   遥感技术通过传感器获取地球表面的信息，广泛应用于土地利用监测、环境评估等领域。它是信息地理学中重要的数据来源之一。\n",
      "\n",
      "7. **地理信息系统（GIS）**  \n",
      "   GIS是信息地理学的核心工具之一，用于存储、分析和可视化地理空间数据。GIS的发展推动了信息地理学的广泛应用。\n",
      "\n",
      "8. **大数据与云计算**  \n",
      "   随着大数据技术的发展，海量地理数据的处理和分析成为可能。云计算则为地理信息的存储和计算提供了高效的技术支持。\n",
      "\n",
      "9. **人工智能与机器学习**  \n",
      "   人工智能（AI）和机器学习技术在地理数据分析中发挥重要作用，例如空间模式识别、预测建模等。\n",
      "\n",
      "10. **环境科学与可持续发展**  \n",
      "    信息地理学在环境监测、资源管理、城市规划等领域有广泛应用，这些领域的研究需求推动了信息地理学的发展。\n",
      "\n",
      "### 总结\n",
      "信息地理学的来源是多学科交叉的结果，它融合了地理学的空间分析方法、计算机科学的数据处理技术以及信息科学的信息管理理论。随着技术的进步和应用需求的增长，信息地理学在城市规划、环境保护、交通管理等领域发挥着越来越重要的作用。\n"
     ]
    }
   ],
   "source": [
    "query = \"信息地理学的来源有哪些\"\n",
    "response = qa_chain.invoke(query)\n",
    "print(response[\"result\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "ab2cdd22-dd02-45b1-a317-c0b8e80866b3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<think>\n",
      "嗯，用户问的是“信息地理学的三个来源是什么”。首先，我需要理解什么是信息地理学。根据名字来看，它可能结合了信息科学和地理学的知识。\n",
      "\n",
      "我记得信息地理学主要研究地理空间中的信息分布、流动以及应用。那它的来源应该包括哪些方面呢？可能是以下几个：\n",
      "\n",
      "1. **地理学**：作为基础学科，地理学提供了关于空间分布、位置分析和环境系统的基础知识。\n",
      "2. **计算机科学与信息技术**：这些技术支撑了信息处理、数据管理和地理信息系统（GIS）的发展。\n",
      "3. **信息科学**：涉及信息的获取、存储、传输和利用，是信息地理学的核心内容。\n",
      "\n",
      "这三个方面相互结合，形成了信息地理学这一交叉学科。可能还有其他来源，但最核心的应该是这三个吧。\n",
      "</think>\n",
      "\n",
      "信息地理学的三个主要来源是：\n",
      "\n",
      "1. **地理学** - 提供空间分析的基础理论和方法。\n",
      "2. **计算机科学与信息技术** - 支持数据处理、存储和地理信息系统（GIS）的发展。\n",
      "3. **信息科学** - 涉及信息的获取、传输和利用，为信息地理学提供核心内容。\n",
      "\n",
      "这些学科的结合促成了信息地理学的形成与发展。\n"
     ]
    }
   ],
   "source": [
    "query = \"信息地理学的三个来源是什么\"\n",
    "response = qa_chain.invoke(query)\n",
    "print(response[\"result\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3b5cc145-6801-425b-a6de-22766818b877",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py3.12_torch22",
   "language": "python",
   "name": "py3.12_torch22"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
